home *** CD-ROM | disk | FTP | other *** search
/ The CICA Windows Explosion! / The CICA Windows Explosion! - Disc 2.iso / programr / wtj208.zip / ZEMPEL / SOURCE / THUNK32 / THUNK32.C < prev    next >
C/C++ Source or Header  |  1993-05-08  |  4KB  |  128 lines

  1. /*    thunk32.c       main source for 32 bit Win32s exe that loads the UT dll's   
  2.             linked with ut32.lib */
  3.  
  4. #include <windows.h>
  5. #include <stdio.h>
  6. #include <string.h>
  7. #include "thunk32.h"
  8. #include "ut32.h"
  9.  
  10. int WINAPI WinMain (HANDLE hInstance,HANDLE hPrevInstance,  //standard window setup
  11.             LPSTR lpCmdLine, int nCmdShow)
  12. { MSG msg;
  13.   if (!hPrevInstance)
  14.   {
  15.     WNDCLASS wc;
  16.     wc.style         = 0;
  17.     wc.lpfnWndProc   = (WNDPROC)MainWndProc;
  18.     wc.cbClsExtra    = 0;
  19.     wc.cbWndExtra    = 0;
  20.     wc.hInstance     = hInstance;
  21.     wc.hIcon         = LoadIcon(hInstance, "Thunk32Icon");
  22.     wc.hCursor       = LoadCursor (NULL, IDC_ARROW);
  23.     wc.hbrBackground = GetStockObject (WHITE_BRUSH);
  24.     wc.lpszMenuName  = (LPCTSTR) "Menu";
  25.     wc.lpszClassName = (LPCTSTR) "Thunk32";
  26.  
  27.     if (!RegisterClass (&wc))
  28.     {
  29.       MessageBox (NULL, (LPCTSTR) "WinMain(): RegisterClass() failed",
  30.           (LPCTSTR) "Err! - Thunk32", MB_OK | MB_ICONEXCLAMATION);
  31.       return(FALSE);
  32.     }
  33.   }
  34.  
  35.   if (!(ghwndMain = CreateWindow ("Thunk32",
  36.                   "Thunk32",
  37.                   WS_OVERLAPPEDWINDOW,
  38.                   CW_USEDEFAULT, CW_USEDEFAULT,
  39.                   CW_USEDEFAULT, CW_USEDEFAULT,
  40.                   NULL, NULL, hInstance, NULL)))
  41.     return (0);
  42.  
  43.   ShowWindow (ghwndMain, nCmdShow);
  44.  
  45.   while (GetMessage (&msg, NULL, 0, 0))
  46.   {
  47.     TranslateMessage (&msg);
  48.     DispatchMessage  (&msg);
  49.   }
  50.  
  51.   return (msg.wParam);
  52. }
  53.  
  54. LRESULT CALLBACK MainWndProc (HWND hwnd, UINT message, WPARAM wParam, //standard message handling
  55.                   LPARAM lParam)
  56. {               
  57.     static long Data1[SIZE]={300,100};
  58.     long AddResult, SubResult, MultResult, DivResult;
  59.     static char buffer[256]={0};
  60.     static char title[128] ={0};
  61.     static char temp[128]={0};
  62.  
  63.     switch (message)
  64.       {
  65.         case WM_COMMAND:
  66.  
  67.               switch (LOWORD(wParam))
  68.               {
  69.  
  70.             case IDM_VERSION:
  71.             bUnder31=((DWORD)GetVersion() & 0x80000000);
  72.             if (bUnder31)
  73.                   MessageBox (ghwndMain, (LPCTSTR) "Running Under Win 3.1 Win32s- Thunking available", 
  74.                 (LPCSTR) "WIN32 version", MB_OK); 
  75.             else 
  76.                   MessageBox (ghwndMain, (LPCTSTR) "Running Under Windows NT- Thunking not available",
  77.                 (LPCSTR) "WIN32 version", MB_OK);
  78.              break;
  79.  
  80.             case IDM_THUNK16:
  81.  
  82.               MessageBox(ghwndMain, (LPCSTR) "Thunking 32 -> 16, Operands are 100 and 300", (LPCSTR) "Call 16 bit DLL", MB_OK);
  83.             AddResult=(long) AddTwo(Data1);
  84.             SubResult=(long) SubTwo(Data1);
  85.             MultResult=(long) MultTwo(Data1);
  86.               DivResult=(long) DivTwo(Data1);
  87.             strcpy(buffer, "Answers are : \n");
  88.             wsprintf(temp, "Addition= %ld\n Subtraction= %ld\n Multiplication = %ld\n Division = %ld\n", AddResult, SubResult, MultResult, DivResult);    
  89.               strcat(buffer, temp);
  90.               MessageBox(ghwndMain, buffer, "Call 32 -> 16 Thunk", MB_OK);           
  91.             break;
  92.  
  93.             case IDM_32DLL:
  94.       
  95.               MessageBox (ghwndMain, (LPCTSTR) "Win32 DLL Function called\n Operands are 100 and 300", (LPCSTR) "Call 32 bit DLL", MB_OK);
  96.               AddResult=(long) AddTwoDLL32(Data1);
  97.               SubResult=(long) SubTwoDLL32(Data1);
  98.               MultResult=(long) MultTwoDLL32(Data1);
  99.               DivResult=(long) DivTwoDLL32(Data1);
  100.               strcpy(buffer, "Answers are : \n");
  101.               wsprintf(temp, "Addition= %ld\n Subtraction= %ld\n Multiplication = %ld\n Division = %ld\n", AddResult, SubResult, MultResult, DivResult);    
  102.               strcat(buffer, temp);
  103.               MessageBox (ghwndMain, buffer, (LPCSTR) "Call 32 bit DLL", MB_OK);
  104.             break;
  105.  
  106.             case IDM_ABOUT:
  107.  
  108.              MessageBox (ghwndMain, (LPCTSTR) "            Thunk32\n A Win32s DLL Loader\n\n          John Zempel\n WinTech Journal, 1993", (LPCSTR) "About Thunk32", MB_OK);
  109.             break;
  110.  
  111.             default:
  112.               break;
  113.         }
  114.         break;
  115.  
  116.         case WM_DESTROY:
  117.             PostQuitMessage(0);
  118.               break;
  119.  
  120.             default:
  121.  
  122.               return (DefWindowProc(hwnd, message, wParam, lParam));
  123.     }
  124. return (0);
  125. }
  126.  
  127.  
  128.